背景介绍
ACGAN(Auxiliary Classifier Generative Adversarial Networks, 辅助分类器生成式对抗网络):于2016年提出,是CGAN类型网络的升级版本,引入了Embedding层对类别标签进行处理,而且增加了类别分类网络,因此称之为辅助分类器生成式对抗网络。
ACGAN特点
类似于DCGAN和CGAN的结合,将卷积使用在CGAN网络之中。
引入了Embedding层对类别标签进行处理,Embedding层可以将输入的数字转化为一维向量。
判别器中不但对真假置信度进行loss计算,而且使用了辅助类别分类器,对判别出的类别进行loss计算。
ACGAN图像分析
TensorFlow2.0实现
1 | import os |
模型运行结果
小技巧
- 图像输入可以先将其归一化到0-1之间或者-1-1之间,因为网络的参数一般都比较小,所以归一化后计算方便,收敛较快。
- 注意其中的一些维度变换和numpy,tensorflow常用操作,否则在阅读代码时可能会产生一些困难。
- 可以设置一些权重的保存方式,学习率的下降方式和早停方式。
- ACGAN对于网络结构,优化器参数,网络层的一些超参数都是非常敏感的,效果不好不容易发现原因,这可能需要较多的工程实践经验。
- 先创建判别器,然后进行compile,这样判别器就固定了,然后创建生成器时,不要训练判别器,需要将判别器的trainable改成False,此时不会影响之前固定的判别器,这个可以通过模型的_collection_collected_trainable_weights属性查看,如果该属性为空,则模型不训练,否则模型可以训练,compile之后,该属性固定,无论后面如何修改trainable,只要不重新compile,都不影响训练。
- ACGAN中引入了Embedding层,并且使用乘法将标签结合在输入随机数之中,这样可以避免标签数远远小于随机数的维度造成的灾难,因为CGAN中的生成器是采用Concatenate的方式将其结合,但是如果随机数为100维,而类别只有2类,则类别的影响会非常小。而且采用了卷积层的方式减少了使用全连接层的参数,使用辅助分类器对判别器输出的类别标签进行分类,更有效的完成不同类别图像的生成。
ACGAN小结
ACGAN是一种有效的生成式对抗网络,从上图可以看出ACGAN模型的参数量只有0.4M,和DCGAN参数量几乎相同,相比于CGAN,减少了参数量,而且效果有显著的提升,小伙伴们一定要掌握它。